package com.ruboweb.xml;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.apache.log4j.Logger;

import com.ruboweb.domain.Config;

/**
 * Clase que carga un fichero XML en el modelo java
 */
public class ParserConfigXml {
	private static Logger logger = Logger.getLogger(ParserConfigXml.class);

	/**
	 * Singleton
	 */
	private static ParserConfigXml instance;

	/**
	 * Modelo mapaeado en el fichero XML
	 */
	private Config model;

	/**
	 * Constructor de la clase
	 */
	private ParserConfigXml() {
		JAXBContext jc;
		try {
			jc = JAXBContext.newInstance(Config.class);

			Unmarshaller unmarshaller = jc.createUnmarshaller();
			File xml = new File("config.xml");
			this.model = (Config) unmarshaller.unmarshal(xml);
		} catch (JAXBException e) {
			ParserConfigXml.logger
					.error("Se ha producido un error al parsear el fichero XML");
			ParserConfigXml.logger
					.error(e.getCause() + " -> " + e.getMessage());
			e.printStackTrace();
		}
	}

	/**
	 * @return Crea el objeto si no existe y lo retorna. Si existe lo retorna
	 */
	public static ParserConfigXml getInstance() {

		if (ParserConfigXml.instance == null) {
			ParserConfigXml.instance = new ParserConfigXml();
		}

		return ParserConfigXml.instance;
	}

	/* Gets */
	public Config getModel() {
		return this.model;
	}

}
